package com.wn.interceptor;

import cn.hutool.json.JSONException;
import cn.hutool.jwt.JWTUtil;
import com.wn.exception.TokenException;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author yellow Docter
 * @date 2024-07-08
 * @desc 蜗牛创想：www.woniuxy.com
 *   token 拦截器  （1、实现接口 2、重写方法 3、配置）
 *      1、拿到token
 *      2、验证token
 *      3、放行
 */
public class TokenInterceptor implements HandlerInterceptor {

    //在 controller 处理请求前 的操作
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
            Exception {
        //前端的token在头信息中: Authorization: Bearer abc123
        //通过request 获取头信息中 的token
        String  token = request.getHeader("Token");
        if (token != null) {
            //校验token
            if (JWTUtil.verify(token,"1234".getBytes())){
                return true;
            }
            return false;
        }
        //没有token 抛出异常
        //1、抛出自定义异常  2、全局捕获指定的异常
        throw new TokenException("token为null 请先登录进行后续操作");
    }
}
